package com.example.mall_system.controller;

import com.example.mall_system.common.Result;
import com.example.mall_system.entity.Product;
import com.example.mall_system.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    // 获取所有商品（分页）- 公开访问
    @GetMapping
    public Result<?> getAllProducts(@RequestParam(defaultValue = "1") int page,
                                @RequestParam(defaultValue = "10") int size,
                                @RequestParam(required = false) String keyword) {
        return productService.getAllProducts(page, size, keyword);
    }

    // 根据ID获取商品 - 公开访问
    @GetMapping("/{id}")
    public Result<?> getProductById(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    // 添加商品 - 卖家和管理员权限
    @PostMapping
    public Result<?> addProduct(@RequestBody Product product, 
                               @RequestParam Long userId, 
                               @RequestParam Integer role) {
        // 权限检查：只有卖家和管理员可以添加商品
        if (role == null || (role != 1 && role != 2)) {
            return Result.error(403, "权限不足，只有卖家和管理员可以添加商品");
        }
        return productService.addProduct(product, userId, role);
    }

    // 更新商品 - 卖家和管理员权限
    @PutMapping("/{id}")
    public Result<?> updateProduct(@PathVariable Long id, 
                                  @RequestBody Product product,
                                  @RequestParam Long userId, 
                                  @RequestParam Integer role) {
        // 权限检查：只有卖家和管理员可以更新商品
        if (role == null || (role != 1 && role != 2)) {
            return Result.error(403, "权限不足，只有卖家和管理员可以更新商品");
        }
        product.setId(id);
        return productService.updateProduct(product, userId, role);
    }

    // 删除商品 - 卖家和管理员权限
    @DeleteMapping("/{id}")
    public Result<?> deleteProduct(@PathVariable Long id,
                                  @RequestParam Long userId, 
                                  @RequestParam Integer role) {
        // 权限检查：只有卖家和管理员可以删除商品
        if (role == null || (role != 1 && role != 2)) {
            return Result.error(403, "权限不足，只有卖家和管理员可以删除商品");
        }
        return productService.deleteProduct(id, userId, role);
    }

    // 按分类获取商品 - 公开访问
    @GetMapping("/category/{category}")
    public Result<?> getProductsByCategory(@PathVariable String category) {
        return productService.getProductsByCategory(category);
    }

    // 获取卖家商品列表 - 卖家权限
    @GetMapping("/seller/{sellerId}")
    public Result<?> getSellerProducts(@PathVariable Long sellerId,
                                      @RequestParam Long userId,
                                      @RequestParam Integer role) {
        // 权限检查：只有卖家本人和管理员可以查看卖家的商品
        if (role == null || (role != 1 && role != 2)) {
            return Result.error(403, "权限不足");
        }
        if (role == 1 && !sellerId.equals(userId)) {
            return Result.error(403, "只能查看自己的商品");
        }
        return productService.getSellerProducts(sellerId);
    }

    // 批量删除商品 - 卖家和管理员权限
    @DeleteMapping("/batch")
    public Result<?> batchDeleteProducts(@RequestBody Long[] productIds,
                                        @RequestParam Long userId,
                                        @RequestParam Integer role) {
        // 权限检查：只有卖家和管理员可以批量删除商品
        if (role == null || (role != 1 && role != 2)) {
            return Result.error(403, "权限不足，只有卖家和管理员可以删除商品");
        }
        return productService.batchDeleteProducts(productIds, userId, role);
    }
}